`timescale 1ns/1ps
`default_nettype none

module gclk_gen_mbi6334 (
    // system signal
     input  wire         I_sclk  // 125M
    ,input  wire         I_rst_n
    // config
    ,input  wire [7:0]   I_cfg_gclk_low   // 时钟低电平时钟数
    ,input  wire [7:0]   I_cfg_gclk_cycle // 时钟整周期时钟数
    // gclk
    ,output wire         O_gclk_out
);
// gclk
reg  [7:0]  gclk_cnt;
reg         gclk_out;

// gclk_cnt
always @(posedge I_sclk or negedge I_rst_n) begin
    if (~I_rst_n)
        gclk_cnt <= 1'b1;
    else if ( gclk_cnt == I_cfg_gclk_cycle)
        gclk_cnt <= 1'b1;
    else
        gclk_cnt <= gclk_cnt + 1'b1;
end

// gclk_out
always @(posedge I_sclk or negedge I_rst_n) begin
    if (~I_rst_n)
        gclk_out <= 1'b0;
    else if (gclk_cnt == I_cfg_gclk_low)
        gclk_out <= 1'b1;
    else if (gclk_cnt == I_cfg_gclk_cycle)
        gclk_out <= 1'b0;
end

assign O_gclk_out = gclk_out;

endmodule

`default_nettype wire

// vim:set ts=4 sw=4 et fenc=utf-8 fdm=marker:
